<?php

/**
 * InscripcionController
 *
 * @author
 * @version
 */
require_once 'Zend/Controller/Action.php';
require_once 'IndexController.php';

// Provides validator chaining capability
require_once 'Zend/Validate.php';
require_once 'Zend/Date.php';
require_once 'Zend/Mail.php';

class InscripcionController extends IndexController {

	public static $regexpEmail = '^([\w]+)(([-\.][\w]+)?)*@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$';

	function init() {
		parent::init ();
		Zend_Loader::loadClass ( 'TempMiembrosModel' );
		Zend_Loader::loadClass ( 'UsuariosModel' );
		Zend_Loader::loadClass ( 'Zend_Registry' );
	}

	private function buscarError($codErrores) {
		$errores = array();
		if (is_array($codErrores)) {
			for ($i = 0; $i < count($codErrores); $i++) {
				$cod = $codErrores[$i];
				if (array_key_exists($cod, $this->view->datos['errores'])) {
					$errores[$cod] = $this->view->datos['errores'][$cod];
				}
			}
		} else if (array_key_exists($codErrores, $this->view->datos['errores'])) {
			$errores[$cod] = $this->view->datos['errores'][$cod];
		}
		return $errores;
	}

	private function cargardatos() {
		$datos = array();
		$datosUsuario = array();
		$this->view->regexpEmail = InscripcionController::$regexpEmail;
		$this->view->credencial = $this->getRequest ()->getParam ( "credencial" );
		$this->view->contrasena = $this->getRequest ()->getParam ( "contrasena" );
		$this->view->cedula = $this->getRequest ()->getParam ( "cedula" );
		$this->view->correo = $this->getRequest ()->getParam ( "correo" );
		$this->view->claveValidacion = $this->getRequest ()->getParam ( "claveValidacion" );

		$datos['credencial'] = $this->view->credencial;
		$datos['contrasena'] = $this->view->contrasena;
		$datos['cedula'] = $this->view->cedula ;
		$datos['correo'] = $this->view->correo ;
		$datos['claveValidacion'] = $this->view->claveValidacion ;

		$erroresParametros = $this->verificarParametros($datos);
		if (	!array_key_exists('F01', $erroresParametros)&& !array_key_exists('E01', $erroresParametros)
			&&	!array_key_exists('F02', $erroresParametros)&& !array_key_exists('E02', $erroresParametros)) {
			$datosUsuario = $this->verificarDatos($datos);
			$datos['errores'] = array_merge($datosUsuario['errores'], $erroresParametros);
		} else {
			$datos['errores'] = $erroresParametros;

		}
		$datos = array_merge($datos, $datosUsuario);
		$this->view->datos = $datos;
		//$this->view->mensajesValidacion = $datos['errores'];
	}

	private function verificarParametros($params) {
		$errores = array();

		if (! Zend_Validate::is($params['credencial'], 'NotEmpty')) {
			$errores['F01'] = "Es requerido que suministre una credencial.";
		} else if (! (
			Zend_Validate::is($params['credencial'] , 'StringLength', array(7, 7)) ||
			Zend_Validate::is($params['credencial'] , 'Int') ||
			Zend_Validate::is($params['credencial'] , 'Digits') ||
			Zend_Validate::is($params['credencial'] , 'Between', array(100000, 300000))
			)) {
			$errores['I01'] = "La credencial suministrada es inválida.";
		} else if (stripos ( $params['credencial'], "2" ) == 1 ) {
			if (! Zend_Validate::is($params['cedula'] , 'NotEmpty')) {
				$errores['F02'] = "Si la credencial es de un adulto, es requerido que suministre la cédula.";
			} else if (! Zend_Validate::is($params['cedula'] , 'StringLength', array(1, 8))) {
				$errores['I02'] = "La cédula suministrada es inválida.";
			}
		}

		//$validatorCorreo = new Zend_Validate_Regex( $this->regexpEmail );

		//$validatorCorreo = new Zend_Validate_EmailAddress();
		//$validatorCorreo->setMessage ( "Correo debe ser valido" );


		if (! Zend_Validate::is($params['correo'] , 'NotEmpty')) {
			$errores['F03'] = "La dirección de correo electrónico es requerida.";
		} else if (! Zend_Validate::is($params['correo'] , 'EmailAddress')) {
			$errores['I03'] = "La dirección de correo electrónico suministrada es inválida.";
		}


		if (! Zend_Validate::is($params['contrasena'] , 'NotEmpty')) {
			$errores['F04'] = "La contraseña es requerida";
		}

		if (! Zend_Validate::is($params['claveValidacion'] , 'NotEmpty')) {
			$errores['F05'] = "La clave de validación es requerida";
		} else if (! (
			Zend_Validate::is($params['claveValidacion'] , 'StringLength', array(10, 10)) ||
			Zend_Validate::is($params['claveValidacion'] , 'Int') ||
			Zend_Validate::is($params['claveValidacion'] , 'Digits')
			)) {
			$errores['I05'] = "La clave de validación suministrada es inválida.";
		}


		return $errores;
	}

	private function verificarDatos($params) {
		$datos = array();
		$errores = array();
		$cedula = $this->view->cedula;
		$credencial = $this->view->credencial;
		$where = "Credencial = '$credencial'";
		if (stripos ( $credencial, "2" ) == 1) {
			$where .= " and Cedula = '$cedula'";
		}
		$tempMiembros = new TempMiembrosModel();

		$res = $tempMiembros->fetchAll ( $where );
		$cantidad = $res->count ();

		if ($cantidad == 0) {
			$errores['TNE'] = 'No se encuentra miembro ASV con la credencial y/o cédula dada, verifique los datos o confirme con la dirección Nacional de Operaciones la fecha de la última actualización de la base de datos de este Sitio Web.';
			$datos['errores'] = $errores;
			return $datos;
		} else {
			$datos['tempMiembros'] = $res->current();
			$datos['cargos'] = $res->toArray();
		}

		$usuariosModel = new UsuariosModel();
		$registradoValidado = $usuariosModel->fetchAll("status = 'V' and credencial = $credencial");
		$registradoNoValidado = $usuariosModel->fetchAll("status = 'N' and credencial = $credencial");
		if ($registradoValidado->count() > 0) {
			$datos['usuario'] = $registradoValidado->current();
			$errores ['SEV'] = "El usuario con la credencial $credencial, ya está inscrito y validado en el sistema, puede iniciar sesión. La contraseña le ha sido enviada a su correo electrónico.";
		} else if ($registradoNoValidado->count() > 0) {
			$datos['usuario'] = $registradoNoValidado->current();
			$errores ['SEIV'] = "El usuario con la credencial $credencial, ya está inscrito en el sistema, pero debe validarlo. Se ha enviado la clave de validación a su correo electrónico.";
		} else {
			$errores ['UNE'] = "El usuario con la credencial $credencial, no está inscrito en el sistema.";
		}
		$datos['errores'] = $errores;
		return $datos;
	}

	/**
	 * The default action - show the home page
	 */
	public function indexAction() {
		$this->_forward("identificacion");
	}


	public function identificacionAction() {
		$this->view->title = "Identificación";
		$this->cargardatos();
		$errores = array();
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$this->_forward("recordarContrasena");
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {
			$this->_forward("validacion");
		} else {
			if (array_key_exists('TNE', $this->view->datos['errores'])) {
				$errores[] = $this->view->datos['errores']['TNE'];
			}
		}
		if (isset($this->view->mensajesValidacion) && is_array($this->view->mensajesValidacion)) {
			$this->view->mensajesValidacion = array_merge($this->view->mensajesValidacion, $errores);
		} else {
			$this->view->mensajesValidacion = $errores;
		}
	}


	/**
	 * The confirmar Identidad action
	 */
	public function confirmaridentidadAction() {
		$this->view->title = "Confirmación Identidad";
		$this->cargardatos ();
		$errores = array();
		$paramsInvalidos = $this->buscarError(array('F01', 'I01', 'F02', 'I02', 'TNE'));
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$this->_forward("recordarContrasena");
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {
			$this->_forward("validacion");
		} else if (count($paramsInvalidos) > 0) {
			$errores = array_merge($errores, $paramsInvalidos);
			if (isset($this->view->mensajesValidacion) && is_array($this->view->mensajesValidacion)) {
				$this->view->mensajesValidacion = array_merge($this->view->mensajesValidacion, $errores);
			} else {
				$this->view->mensajesValidacion = $errores;
			}
			$this->view->mensajesValidacion = $errores;
			$this->_forward("identificacion");
		}
		$this->view->datosMiembro = $this->view->datos['cargos'];
		$this->view->mensajesValidacion = $errores;
	}

	public function guardarinscripcionAction() {
		$this->cargardatos ();
		$paramsInvalidos = $this->buscarError(array('F01', 'I01', 'F02', 'I02', 'F03', 'I03', 'F04', 'TNE'));
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$this->_redirect("/inscripcion/recordarContrasena?credencial=" . $this->view->datos['credencial']);
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {
			$this->_redirect("/inscripcion/validacion?credencial=" . $this->view->datos['credencial']);
		} else if (count($paramsInvalidos) > 0) {
			$errores = $paramsInvalidos;
			$this->view->mensajesValidacion = $errores;
			$this->_forward("confirmarIdentidad");

		} else if (array_key_exists('UNE', $this->view->datos['errores'])) {
			$date = Zend_Date::now();

			$usuariosModel = new UsuariosModel();
			$datosUsuario['credencial'] = $this->view->credencial;
			$datosUsuario['contrasena'] = $this->view->contrasena;
			$datosUsuario['correo'] = $this->view->correo;
			$datosUsuario['fechaInscripcion'] = $date->toString("yyyy-MM-dd HH:mm:ss");
			$usuariosModel->insert($datosUsuario);
			$credencial = $this->view->credencial;
			$this->_redirect("/inscripcion/validacion?credencial=$credencial");
		} else {
			$this->view->mensajesValidacion = $this->view->datos['errores'];
			//var_dump($datos);
			//die('Purificar');
			//array("Sin errores");
			$this->_forward("identificacion");
		}
	}

	/**
	 * The validacion action
	 */
	public function validacionAction() {
		$this->cargardatos ();
		$paramsInvalidos = $this->buscarError(array('F01', 'I01', 'UNE', 'TNE'));
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$this->_redirect("/inscripcion/recordarContrasena?credencial=" . $this->view->datos['credencial']);
		} else if (count($paramsInvalidos) > 0) {
			$errores = $paramsInvalidos;
			if (isset($this->view->mensajesValidacion) && is_array($this->view->mensajesValidacion)) {
				$this->view->mensajesValidacion = array_merge($this->view->mensajesValidacion, $errores);
			} else {
				$this->view->mensajesValidacion = $errores;
			}
			$this->_forward("identificacion");
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {

			$usuario = $this->view->datos['usuario']->toArray();
			$mail = new Zend_Mail();

			$this->view->claveValidacion = crc32($usuario['correo'] . '|'  . $usuario['contrasena']);
			$this->view->correo = $usuario['correo'];
			$mail->setBodyText('La clave de validacion es: ' . $this->view->claveValidacion);
			$mail->setFrom('concursos@scoutsvenezuela.org.ve', 'Registro Nacional Actividades Scouts');
			$mail->addTo($usuario['correo']);
			$mail->addBcc('chebetos@scoutsdecarabobo.org.ve');
			$mail->setSubject('Clave de Validacion');
			$mail->send();
		} else {
			$this->view->mensajesValidacion = $this->view->datos['errores'];
			//var_dump($datos);
			//die('Purificar');
			//array("Sin errores");
			$this->_forward("identificacion");
		}
	}

	/**
	 * Valida que el codigo sea correcto
	 */
	public function validarcodigoAction() {
		$this->cargardatos ();
		$paramsInvalidos = $this->buscarError(array('F01', 'I01', 'F05', 'I05', 'UNE', 'TNE'));
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$this->_redirect("/inscripcion/recordarContrasena?credencial=" . $this->view->datos['credencial']);
		} else if (count($paramsInvalidos) > 0) {
			$errores = $paramsInvalidos;
			$this->view->mensajesValidacion = $errores;
			$this->_forward("validacion");
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {
			$usuarioModel = $this->view->datos['usuario'];
			$usuario = $usuarioModel->toArray();
			$claveValidacionG = crc32($usuario['correo'] . '|'  . $usuario['contrasena']);
			if ($claveValidacionG == $this->view->datos['claveValidacion']) {
				$usuarioModel->status = 'V';
				$usuarioModel->save();
				$this->_redirect("/inscripcion/recordarContrasena?credencial=" . $this->view->datos['credencial']);
			} else {
				$mensajes[] = 'La clave indicada es incorrecta';
				$this->view->mensajesValidacion = $mensajes;
				$this->_forward("validacion");
			}
		} else {
			$this->view->mensajesValidacion = $this->view->datos['errores'];
			//var_dump($datos);
			//die('Purificar');
			//array("Sin errores");
			$this->_forward("identificacion");
		}
	}

	public function recordarcontrasenaAction() {
		$this->view->title = "Recordar Contraseña";
		$this->cargardatos ();
		$paramsInvalidos = $this->buscarError(array('F01', 'I01', 'UNE', 'TNE'));
		if (array_key_exists('SEV', $this->view->datos['errores'])) {
			$usuario = $this->view->datos['usuario']->toArray();
			$this->view->correo = $usuario['correo'];
			$mail = new Zend_Mail();

			$mail->setBodyText('Su contraseña es: ' . $usuario['contrasena']);
			$mail->setFrom('concursos@scoutsvenezuela.org.ve', 'Registro Nacional Actividades Scouts');
			$mail->addTo($usuario['correo']);
			$mail->addBcc('chebetos@scoutsdecarabobo.org.ve');
			$mail->setSubject('Recordatorio de contraseña - RNAASV - Concursos');
			$mail->send();
			//var_dump($usuario);
			//die('FIN');
		} else if (count($paramsInvalidos) > 0) {
			$errores = $paramsInvalidos;
			$this->view->mensajesValidacion = $errores;
			$this->_forward("identificacion");
		} else if (array_key_exists('SEIV', $this->view->datos['errores'])) {
			$errores['SEIV']= $this->view->datos['errores']['SEIV'];
			$this->view->mensajesValidacion = $errores;
			$this->_forward("validacion");
		}
	}
}